package com.sh.example.provider;


import com.sh.example.common.service.UserService;
import com.sh.rpc.RpcApplication;
import com.sh.rpc.confige.RegistryConfig;
import com.sh.rpc.confige.RpcConfig;
import com.sh.rpc.model.ServiceMetaInfo;
import com.sh.rpc.registry.LocalRegistry;
import com.sh.rpc.registry.Registry;
import com.sh.rpc.registry.RegistryFactory;
import com.sh.rpc.server.VertxHttpServer;

/**
 * 简易服务提供者示例
 */
public class EasyProviderExample {
    public static void main(String[] args) {
        // 初始化PRC框架   就是设置 RPC服务的各种属性   这个init只用一次
        RpcApplication.init();
        // 注册服务  LocalRegistry 是RPC框架内置的注册中心  可以注册服务
        LocalRegistry.register(UserService.class.getName(), UserServiceImpl.class);
        // 获取注册中心配置类
        RpcConfig rpcConfig = RpcApplication.getRpcConfig();
        RegistryConfig registryConfig = rpcConfig.getRegistryConfig();   // 注册中心配置类
        //                                                          etcd
        Registry registry = RegistryFactory.getInstance(registryConfig.getRegistry());
        // 初始化注册中心  就是初始化这个类里面想存储系统添加数据的java客户端
        // 设置要注册的服务
        ServiceMetaInfo serviceMetaInfo = new ServiceMetaInfo();
        serviceMetaInfo.setServiceName(UserService.class.getName());    // 注册服务名称
        serviceMetaInfo.setServiceHost(rpcConfig.getServerHost());   // localhost
        serviceMetaInfo.setServicePort(rpcConfig.getServerPort());   // 8080
        try {
            // 注册服务
            registry.register(serviceMetaInfo);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        VertxHttpServer vertxHttpServer = new VertxHttpServer();   // 创建服务端  VertxHttpServer 是框架内置的服务端
        vertxHttpServer.doStart(rpcConfig.getServerPort());

    }
}
